//
//  UserManager.m
//  dongbo
//
//  Created by 葛殿宏 on 16/2/23.
//  Copyright © 2016年 arenacloud. All rights reserved.
//
#import "CommonUtil.h"
#import "NIFLog.h"
#import "UserManager.h"

const NSString* c_my_account_archive_file_name = @"dongboAccount.archive";

@implementation UserManager

static UserManager*  s_user = nil;
static dispatch_once_t onceToken;

+(UserManager*)shareInstance
{
    dispatch_once(&onceToken, ^{
        s_user =  [[self alloc] init];
    });
    return s_user;
}

+(void)destroyInstance
{
    if (nil != s_user) {
        s_user = nil;
    }
}

//支持是否支持加密
+ (BOOL)supportsSecureCoding
{
    return YES;
}

#pragma mark - getter
- (User*)user{
    
    if(nil == _user){
        _user = [[User alloc] init];
    }
    return _user;
}

#pragma mark - 路径获取
+ (NSString*) GetDocumentsPath;
{
    NSArray *paths =
    NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                        NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    return documentsPath;
}

- (BOOL)userIslogin
{
    BOOL islogin = NO;
    
    if ([self.user.islogin intValue] == 1) {
        islogin = YES;
    }else
    {
        islogin = NO;
    }

//    if (self.user.accountId == nil  || self.user.username.length == 0) {
//        islogin = NO;
//    }else
//    {
//        islogin = YES;
//    }
    return islogin;
}

/*！
 *@method update_to_disk
 *@abstract 保存数据到硬盘
 *@discussion 每次更新成员属性，需要手工调用此函数，将更新内容持久化到磁盘。
 */
- (void) update_to_disk
{
    NIF_INFO("check point 001, path = %@", [CommonUtil GetDocumentsPath]);
    
    [NSKeyedArchiver archiveRootObject:self.user toFile:[[CommonUtil GetDocumentsPath] stringByAppendingPathComponent:(NSString*)c_my_account_archive_file_name]];
}

/*！
 *@method  init_singleton_from_disk
 *@abstract 从硬盘初始化用户信息
 *@discussion 程序启动时应该首先调用该函数。
 */
- (void) init_singleton_from_disk
{
    NIF_INFO("check point 002, path = %@", [CommonUtil GetDocumentsPath]);
    
    s_user.user = (User*)[NSKeyedUnarchiver unarchiveObjectWithFile:[[CommonUtil GetDocumentsPath] stringByAppendingPathComponent:(NSString*)c_my_account_archive_file_name]];
    NIF_INFO("check point 003, s_user=%@  %@",((User*)[NSKeyedUnarchiver unarchiveObjectWithFile:[[CommonUtil GetDocumentsPath] stringByAppendingPathComponent:(NSString*)c_my_account_archive_file_name]]).accountId ,[s_user description] );
}


/*！
 *@method   clear_login_status
 *@discussion  注销时使用。
 */
- (void) clear_login_status
{
    [UserManager shareInstance].user.islogin = @(0);
}

/*！
 *@method   clear_all_data
 *@abstract 清空所有内存、磁盘文件。
 *@discussion  注销时使用。
 */
- (void) clear_all_data
{
    
    [self clear_all_data_not_save_to_disk];
    //清空磁盘
    [self update_to_disk];
}

/*！
 *@method      clear_all_data_not_save_to_disk
 *@abstract    清楚所有数据但是不保存在客户端
 *@discussion  清空所有内存、但是硬盘中的数据并未清除， 主意，需要手动调用一次 update_to_disk
 (注意： 注销时使用)
 */
- (void) clear_all_data_not_save_to_disk
{
    //清空用户所有保存数据
    [self.user setAttributes:nil] ;
    self.user = nil;
}



@end
